// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/devtools/protocol/schema_handler.h"

namespace content {
namespace protocol {

    SchemaHandler::SchemaHandler()
        : DevToolsDomainHandler(Schema::Metainfo::domainName)
    {
    }

    SchemaHandler::~SchemaHandler()
    {
    }

    void SchemaHandler::Wire(UberDispatcher* dispatcher)
    {
        Schema::Dispatcher::wire(dispatcher, this);
    }

    Response SchemaHandler::GetDomains(
        std::unique_ptr<protocol::Array<Schema::Domain>>* domains)
    {
        // TODO(kozyatisnkiy): get this from the target instead of hardcoding a list.
        static const char kVersion[] = "1.2";
        static const char* kDomains[] = {
            "Inspector", "Memory", "Page", "Rendering", "Emulation", "Security",
            "Network", "Database", "IndexedDB", "CacheStorage", "DOMStorage", "CSS",
            "ApplicationCache", "DOM", "IO", "DOMDebugger", "ServiceWorker",
            "Input", "LayerTree", "DeviceOrientation", "Tracing", "Animation",
            "Accessibility", "Storage", "Log", "Runtime", "Debugger",
            "Profiler", "HeapProfiler", "Schema", "Target"
        };
        *domains = protocol::Array<Schema::Domain>::create();
        for (size_t i = 0; i < arraysize(kDomains); ++i) {
            (*domains)->addItem(Schema::Domain::Create()
                                    .SetName(kDomains[i])
                                    .SetVersion(kVersion)
                                    .Build());
        }
        return Response::OK();
    }

} // namespace protocol
} // namespace content
